import math


def insert_points_along_line(start_x, start_y, end_x, end_y, interval):
    """
    在线段上每隔指定距离插入点
    参数:
        start (tuple): 线段起点坐标 (x1, y1)
        end (tuple): 线段终点坐标 (x2, y2)
        interval (float): 插入点间距（单位：厘米）
    返回:
        list: 插入点列表（包含起点和终点）
    """
    # 计算线段向量和长度
    dx = end_x - start_x
    dy = end_y - start_y
    length = math.sqrt(dx ** 2 + dy ** 2)

    # 如果线段长度小于间隔，直接返回起点和终点
    if length < interval:
        return [[start_x, start_y], [end_x, end_y]]

    # 计算方向单位向量
    unit_vector = (dx / length, dy / length)

    # 计算需要插入的点数（不包括起点和终点）
    num_points = int(length // interval)

    # 生成插入点（包含起点）
    points = [[start_x, start_y]]

    # 沿线段插入点
    for i in range(1, num_points + 1):
        distance = i * interval
        # 计算新点坐标
        x = start_x + unit_vector[0] * distance
        y = start_y + unit_vector[1] * distance
        points.append([x, y])

    # 添加终点
    points.append([end_x, end_y])

    return points


# 示例使用
if __name__ == "__main__":
    # 定义线段起点和终点
    start_point = (0, 0)
    end_point = (100, 0)  # 100厘米长的水平线段

    # 每隔5厘米插入点
    inserted_points = insert_points_along_line(start_point, end_point, 5)

    # 打印结果
    print(f"起点: {start_point}")
    print(f"终点: {end_point}")
    print(f"插入点数量: {len(inserted_points) - 2}")
    print("所有点坐标:")
    for i, point in enumerate(inserted_points):
        print(f"点{i + 1}: ({point[0]:.1f}, {point[1]:.1f})")